package com.wll.aop.aspect;



import com.wll.aop.annotation.LogTrack;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author ：wanglulu
 * @date ： 2021/11/16 14:59
 * @description： 日志切面
 * @version: 1.0
 */
@Component
@Aspect
@Slf4j
public class LogTrackAspect {

    //这里需要注意了，这个是将自己自定义注解作为切点的根据，路径一定要写正确
    @Pointcut(value = "@annotation(com.wll.aop.annotation.LogTrack)")
    public void access(){}


    // 进入切点世界  之前 处理过程
    @Before("access()")
    public void doBefore(){
        System.out.println("进入切点世界之前处理过程 >>>>>");

    }

    // 环绕增强  实在before之前就会触发
    @Around("@annotation(logTrack)")
    public Object aropund(ProceedingJoinPoint proceedingJoinPoint, LogTrack logTrack) throws Throwable {
        System.out.println("环绕增强  实在before之前就会触发  >>>>>");
        System.out.println("aop 日志环绕开始 " + LocalDateTime.now());
        String value = logTrack.value();
        System.out.println("日志信息》》》》》》》》"+value);
        return proceedingJoinPoint.proceed();
    }

    //进来切点这，最后经过的一个站，也是方法正常运行结束后
    @After("access()")
    public void after(JoinPoint joinPoint) {
        System.out.println("-aop 日志记录结束-" + LocalDateTime.now());
    }

}
